package model

// ----------------------------------------------------------------------------
// 文件：model/link.go
// 描述：连接配置
// 版本：0.5
// 作者：lg
// 日期：2021-07-24
// 修改：2021-07-24 0.1 lg  修改RemoveLink,GetLink函数，修改Link结构体
//      2021-08-01 0.2 lg  修改GetLink函数
//      2021-08-10 0.3 lg  修改Link结构体,GetLinks函数
//      2021-09-16 0.4 lg  修改Link结构体，删除TimeOut字段,修改GetLinks函数
//      2024-12-08 0.5 lg  修改Link结构体
// ----------------------------------------------------------------------------

import (
	"errors"
)

// Link database or ftp link info
type Link struct {
	// 连接ID
	Lid string `gorm:"size:20;primary_key" json:"lid"`
	// 主机名称
	Name string `gorm:"size:50" json:"name"`
	// 主机地址
	Host string `gorm:"size:32" json:"host"`
	// 端口
	Port string `gorm:"size:5" json:"port"`
	// 用户
	Uid string `gorm:"size:20" json:"uid"`
	// 密码
	Password string `gorm:"size:200" json:"password"`
}

// ------------------------------ Link -------------------------

// GetLinks get link list
func GetLinks() *[]Link {
	links := new([]Link)
	db.Select("lid,name,host,port,uid").Find(links)
	return links
}

// GetLink get a link
func GetLink(lid string) *Link {
	link := new(Link)
	db.Where("lid=?", lid).First(link)
	return link
}

// AddLink add a link
func AddLink(link *Link) error {
	row := db.Create(link)
	if err := row.Error; err != nil {
		return err
	}
	if row.RowsAffected < 1 {
		return errors.New("新增连接配置失败")
	}
	return nil
}

// RemoveLink remove a link
func RemoveLink(lid string) error {
	row := db.Delete(&Link{}, "lid = ?", lid)
	if err := row.Error; err != nil {
		return err
	}
	if row.RowsAffected < 1 {
		return errors.New("删除连接配置失败")
	}
	return nil
}
